curl --request GET \
--url http://10.2.4.166:8080/composer/api/folders/tree \
--header 'Authorization: Basic <encoded-value>' \
--header 'X-Enable-Preview: <x-enable-preview>'import requests
url = "http://10.2.4.166:8080/composer/api/folders/tree"
headers = {
"X-Enable-Preview": "<x-enable-preview>",
"Authorization": "Basic <encoded-value>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Enable-Preview': '<x-enable-preview>',
Authorization: 'Basic <encoded-value>'
}
};
fetch('http://10.2.4.166:8080/composer/api/folders/tree', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://10.2.4.166:8080/composer/api/folders/tree",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"X-Enable-Preview: <x-enable-preview>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://10.2.4.166:8080/composer/api/folders/tree"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Enable-Preview", "<x-enable-preview>")
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://10.2.4.166:8080/composer/api/folders/tree")
.header("X-Enable-Preview", "<x-enable-preview>")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("http://10.2.4.166:8080/composer/api/folders/tree")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["X-Enable-Preview"] = '<x-enable-preview>'
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"name": "<string>",
"parent_id": "<string>",
"materialized_path": "<string>",
"depth": 123,
"child_count": 123,
"item_count": 123,
"folder_type": "CONNECTIONS",
"content_type": "DASHBOARDS",
"project_id": "<string>",
"visibility": "PRIVATE",
"inheritance_state": "INHERIT",
"project_type": "DEFAULT",
"permission_inherited": true,
"permissions": [
"READ"
],
"expanded": true
}
][Experimental] Get the current user's root folders across their account, for one content type
curl --request GET \
--url http://10.2.4.166:8080/composer/api/folders/tree \
--header 'Authorization: Basic <encoded-value>' \
--header 'X-Enable-Preview: <x-enable-preview>'import requests
url = "http://10.2.4.166:8080/composer/api/folders/tree"
headers = {
"X-Enable-Preview": "<x-enable-preview>",
"Authorization": "Basic <encoded-value>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Enable-Preview': '<x-enable-preview>',
Authorization: 'Basic <encoded-value>'
}
};
fetch('http://10.2.4.166:8080/composer/api/folders/tree', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://10.2.4.166:8080/composer/api/folders/tree",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"X-Enable-Preview: <x-enable-preview>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "http://10.2.4.166:8080/composer/api/folders/tree"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Enable-Preview", "<x-enable-preview>")
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://10.2.4.166:8080/composer/api/folders/tree")
.header("X-Enable-Preview", "<x-enable-preview>")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("http://10.2.4.166:8080/composer/api/folders/tree")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["X-Enable-Preview"] = '<x-enable-preview>'
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body[
{
"id": "<string>",
"name": "<string>",
"parent_id": "<string>",
"materialized_path": "<string>",
"depth": 123,
"child_count": 123,
"item_count": 123,
"folder_type": "CONNECTIONS",
"content_type": "DASHBOARDS",
"project_id": "<string>",
"visibility": "PRIVATE",
"inheritance_state": "INHERIT",
"project_type": "DEFAULT",
"permission_inherited": true,
"permissions": [
"READ"
],
"expanded": true
}
]Authorizations
HTTP Basic authentication using global administrator credentials (username and password).
Headers
Opt-in header required to access this experimental endpoint. Must be "true" (case-insensitive).
Query Parameters
DASHBOARDS, REPORTS Response
OK
Unique folder identifier
Parent folder id; null means this is a root folder
Full path from root; null for legacy folders not yet backfilled
Tree depth; root = 0, maximum = the configured max depth
Number of direct subfolders. An unfiltered total: unlike the /children listing it is not pruned by the caller's READ permission, so it can exceed what that listing returns
Number of dashboards/reports mapped directly into this folder. An unfiltered total, on the same basis as child_count
The folder's type
CONNECTIONS, SOURCES, VISUALS, DASHBOARDS, REPORTS, PRIVATE, CUSTOM The library this folder organizes (DASHBOARDS or REPORTS); null when untagged. The same value the content_type filter on GET /tree matches on, so a client can tell which library each returned node actually belongs to
DASHBOARDS, REPORTS Id of the project that owns this folder. GET /tree now spans every project the account has, so this disambiguates which project a given root belongs to
PRIVATE, CUSTOM INHERIT, EXPLICIT DEFAULT, GLOBAL, CUSTOM, PERSONAL, LIBRARY_CUSTOM True when this folder's permissions come from its nearest explicit ancestor. False for a root even when its inheritance_state is INHERIT, because a root has no ancestor to inherit from and its own ACL governs
The current caller's effective permissions on this folder, as an array of FolderAclBit names (READ, WRITE, CREATE, DELETE, ADMINISTER, OWNER), e.g. ["READ","WRITE"]
READ, WRITE, CREATE, DELETE, ADMINISTER, OWNER Whether the current caller has this node expanded in their folder tree. Never null: a folder the caller has never expanded reports false. The caller's own UI preference, not a permission — it rides along on the tree reads instead of a separate endpoint
Was this page helpful?